package com.zshan.clinic.admin.mapper.medical;


import com.zshan.clinic.admin.entity.dto.OrderExecDTO;
import com.zshan.clinic.admin.entity.vo.OrderExecDetailVo;
import com.zshan.clinic.admin.entity.vo.OrderExecPageVo;
import com.zshan.clinic.admin.entity.vo.OrderExecPatientVo;
import com.zshan.clinic.admin.entity.vo.OrderExecRecordVo;
import com.zshan.clinic.database.model.OrderExecRx;
import com.zshan.clinic.mybatis.SuperMapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;

/**
 * @author lichen
 */
public interface SpecOrderExecMapper extends SuperMapper {

    /**
     * 批量保存执行单
     * @param orderExecList
     */
    void addExecOrderBatch(@Param("execList") List<OrderExecDTO> orderExecList);

    /**
     * 批量保存执行单的处方
     * @param orderExecRxList
     */
    void addExecOrderRxBatch(@Param("rxList") List<OrderExecRx> orderExecRxList);

    /**
     * 查询执行单列表
     * @param clinicId
     * @param patientName
     * @param visitDate
     * @param offset
     * @param limit
     * @return
     */
    List<OrderExecPageVo> getExecList(@Param("clinicId") Long clinicId,
                                      @Param("execCategory") String execCategory,
                                      @Param("patientName") String patientName,
                                      @Param("visitDate") LocalDate visitDate,
                                      @Param("offset") Integer offset,
                                      @Param("limit") Integer limit);

    /**
     * 查询执行单详情
     * @param clinicId
     * @param orderId
     * @return
     */
    OrderExecDetailVo getExecDetail(@Param("clinicId") Long clinicId, @Param("orderId") Long orderId);

    /**
     * 查询执行单记录
     * @param orderId
     * @param offset
     * @param limit
     * @return
     */
    List<OrderExecRecordVo> getRecordList(@Param("clinicId") Long clinicId,
                                          @Param("orderId") Long orderId,
                                          @Param("offset") Integer offset,
                                          @Param("limit") Integer limit);

    /**
     * 查询患者执行数
     * @param clinicId
     * @param patientId
     * @param visitDate
     * @return
     */
    Long getPatientExecCount(@Param("clinicId") Long clinicId,
                             @Param("patientId") Long patientId,
                             @Param("visitDate") LocalDate visitDate);

    /**
     * 查询患者执行记录
     * @param clinicId
     * @param patientId
     * @param visitDate
     * @param offset
     * @param limit
     * @return
     */
    List<OrderExecPatientVo> getPatientExecList(@Param("clinicId") Long clinicId,
                                                @Param("patientId") Long patientId,
                                                @Param("visitDate") LocalDate visitDate,
                                                @Param("offset") Integer offset,
                                                @Param("limit") Integer limit);
}
